#if !defined(ximera_graphics_ogre_particlesystem_hpp)
#define ximera_graphics_ogre_particlesystem_hpp

// -----------------------------------------------------------

#include <ximera/graphics/iparticlesystem.hpp>
#include <ximera/graphics/ogre/iattachable.hpp>

#include <OgreSceneManager.h>
#include <OgreParticleSystem.h>

namespace ximera { namespace graphics { namespace ogre
{
    class XIMERA_PLUGIN_API ParticleSystem : public IParticleSystem, public IAttachable
    {
    public:
        ParticleSystem(Ogre::SceneManager* ogreSceneManager, String const& name, String const& templateName);
        virtual ~ParticleSystem();

        virtual bool visible() const;
        virtual void visible(bool vis);

        virtual String materialName() const;
        virtual void materialName(String const& name);

        virtual void setDefaultDimensions(Real width, Real height);

        virtual Real speedFactor();
        virtual void speedFactor(Real factor);

        virtual bool castShadows() const;
        virtual void castShadows(bool casts);

        virtual Ogre::MovableObject* ogreMovableObject() const { return _ogreParticleSystem; }
        Ogre::ParticleSystem* ogreParticleSystem() const { return _ogreParticleSystem; }

    private:
        Ogre::ParticleSystem* _ogreParticleSystem;
        Ogre::SceneManager* _ogreSceneManager;
    };
}}}

// -----------------------------------------------------------

#endif
